package com.ctakit.proxy.cglib;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

public class CglibProxy implements MethodInterceptor {  
  
   
    
 // 委托类对象  
    private Object target;  
      
    /** 
     * 创建并返回委托类对象的代理类对象 
     */  
    public Object getInstance(Object target){  
          
        this.target = target;  
        Enhancer enhancer = new Enhancer();  
        // 设置最后生成的代理类的父类  
        enhancer.setSuperclass(target.getClass());  
        // 设置切面回调  
        enhancer.setCallback(this);  
          
        return enhancer.create();  
    }  
      
    public Object intercept(Object proxy, Method method, Object[] args,  
            MethodProxy methodProxy) throws Throwable {  
        // 添加切面逻辑（advise），此处是在目标类代码执行之前，即为MethodBeforeAdviceInterceptor。  
        System.out.println("before-------------");  
        // 执行目标类request方法  
       // Object result = method.invoke(target, args);
       Object result =  methodProxy.invokeSuper(proxy, args);  
        // 添加切面逻辑（advise），此处是在目标类代码执行之后，即为MethodAfterAdviceInterceptor。  
        System.out.println("after--------------");  
        return result;  
    }  
  
}  